# 子应用要有独立的路由文件
# 子应用可以匹配的资源
# 总路由 -> 子应用路径 --> 资源(views.py)
from django.urls import path, register_converter, re_path
from .views import (views, query_views, F_Q_views, annotate_query, 
                    Model_query, limit_query, session_view, cookie_view)
from .views import customUrlpattern

# 注册自定义的路径转换器
# 如果使用的是自定义的路径转化器，在path 函数中，则只能使用自定义的路径转换器，不能使用内置的路径转换器
# 第一个参数是转换器类，第二个参数是转s换器名称
register_converter(customUrlpattern.YearConverter, 'year')

# 路径转换器 是一种用于解析url 路径种动态参数的工具，它可以将url 中的字符串片段转换为特定类型的python 对象(整数，字符串，uuid 等)，并将其传递给视图函数
# 用于实现动态路由匹配，让同一个url 模式可以匹配不同参数的请求
# 一种是内置路径转换器，一种是自定义路径转换器
#  int str uuid(标准的 uuid 格式,唯一识别码 当前时间+计数器+硬件标识) slug(字符串 字母\数字\连字符\下划线组成的字符串) path(文件路径 包含路径分隔符的字符串 c/python/python.exe )
urlpatterns = [
    # path('<int:a>/', views.index),
    # 位置参数
    path('<int:year>/<int:day>/', views.index),
    # 匹配四位数的年份 / 两位数的日期 / 十一位数的手机号码\
    # 使用分组匹配
    # 1.给分组命名 ?P<name>
    # 2.匹配规则
    # 要记得给正则匹配表示加上r 表示原始字符串
    # 正则表达式匹配需要用re_path 函数
    # 国内 严格匹配国内手机号码号段(第二位为3-9)
    # http://127.0.0.1:8000/2025/01/13310212032/ 匹配路由
    # re_path(r'^(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<phone>1[3-9][0-9]{9})/$', views.year_month_phone),
    # 关键字传参
     re_path(r'^(?P<year>\d{4})/(?P<month>\d{2})/(?P<phone>1[3-9]\d{9})/$', views.year_month_phone),
    
    # 查询字符串 通过?key=value 传递参数，不能从url 中获取参数
    path('s/', views.search_view),
    
    # 表单提交，post 请求
    path('p/', views.post_view),
    
    # 登录
    path('login/', views.LoginView),

    # 下载路由
    path('download/', views.download_file),
    # ----------------------------------
    path('indexs/', views.productView, name="index"),
    path('update/', views.productUpdateView),
    path('del/', views.ProductDelView, name="del"),

    # session 操作路由
    path('set_session/', session_view.set_session),
    path('get_session/', session_view.get_session),
    path('del_session/', session_view.del_session),
    path('expire_session/', session_view.set_session_expiry),

    # cookie 操作路由
    path('set_cookie/', cookie_view.set_cookie),
    path('get_cookie/', cookie_view.get_cookie),
    path('del_cookie/', cookie_view.del_cookie),
    # ----------------------------------
    path('get/', query_views.get_query_view),
    path('all/', query_views.query_all_view),
    path('filter/', query_views.query_filter_view),

    # ---------------
    path('f/', F_Q_views.F_query),
    path("q/", F_Q_views.Q_query),

    # ----------------
    path('anno/', annotate_query.agnotate_view),

    # ----------------
    path('model/', Model_query.get_product_review),

    # ---------------
    path('limit/', limit_query.limit_query_view)
]